package models;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import play.db.ebean.Model;

@Entity
@Table(name = "planos_negocios")
public class PlanoNegocio extends Model {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE)
	private Integer id;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "plne_dt_cadastro", nullable = false)
	private Date dataCadatro;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "plne_dt_inicio", nullable = false)
	private Date dataInicio;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "plne_dt_fim", nullable = false)
	private Date dataFim;
	
	@Column(name = "plne_nome", nullable = false, length = 150, unique = true)
	private String nome;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "usua_id_usuarios", nullable = false)
	private Usuarios lider;
	   
	@ManyToOne
	@JoinColumn(name = "plne_plnp_id", nullable = false)
	private PlanoNegocioProgramas programa;
	
	@ManyToOne
	@JoinColumn(name = "plne_pnex_id", nullable = false)
	private PlanoNegocioExecucoes execucao;
	
	@ManyToOne
	@JoinColumn(name = "plne_pnsa_id", nullable = false)
	private StatusAnalises statusAnalises;
	
	@OneToMany(mappedBy = "plaNegocio", fetch = FetchType.LAZY)
	private List<DadosBasicos> dadosBasicos;
	
	@OneToMany(mappedBy = "negocio", fetch = FetchType.LAZY)
	private List<Orcamento> orcamentos;
	
	@OneToMany(mappedBy = "plNegocio", fetch = FetchType.LAZY)
	private List<Fases> fases;
	
	@OneToMany(mappedBy = "planoDeNegocio", fetch = FetchType.LAZY)
	private List<Analises> analises;
	
	@OneToMany(mappedBy = "planoDeNegocio", fetch = FetchType.LAZY)
	private List<PatrocinadoresPlanoNegocio> negociosPatrocinadores;

	public PlanoNegocio() {
		super();
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Date getDataCadatro() {
		return dataCadatro;
	}

	public void setDataCadatro(Date dataCadatro) {
		this.dataCadatro = dataCadatro;
	}

	public Date getDataInicio() {
		return dataInicio;
	}

	public void setDataInicio(Date dataInicio) {
		this.dataInicio = dataInicio;
	}

	public Date getDataFim() {
		return dataFim;
	}

	public void setDataFim(Date dataFim) {
		this.dataFim = dataFim;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Usuarios getLider() {
		return lider;
	}

	public void setLider(Usuarios lider) {
		this.lider = lider;
	}

	public PlanoNegocioProgramas getPrograma() {
		return programa;
	}

	public void setPrograma(PlanoNegocioProgramas programa) {
		this.programa = programa;
	}

	public PlanoNegocioExecucoes getExecucao() {
		return execucao;
	}

	public void setExecucao(PlanoNegocioExecucoes execucao) {
		this.execucao = execucao;
	}

	public StatusAnalises getStatusAnalises() {
		return statusAnalises;
	}

	public void setStatusAnalises(StatusAnalises statusAnalises) {
		this.statusAnalises = statusAnalises;
	}
	
	public List<DadosBasicos> getDadosBasicos() {
		return dadosBasicos;
	}

	public void setDadosBasicos(List<DadosBasicos> dadosBasicos) {
		this.dadosBasicos = dadosBasicos;
	}

	public List<Orcamento> getOrcamentos() {
		return orcamentos;
	}

	public void setOrcamentos(List<Orcamento> orcamentos) {
		this.orcamentos = orcamentos;
	}

	public List<Fases> getFases() {
		return fases;
	}

	public void setFases(List<Fases> fases) {
		this.fases = fases;
	}
	
	public List<Analises> getAnalises() {
		return analises;
	}

	public void setAnalises(List<Analises> analises) {
		this.analises = analises;
	}

	public List<PatrocinadoresPlanoNegocio> getNegociosPatrocinadores() {
		return negociosPatrocinadores;
	}

	public void setNegociosPatrocinadores(
			List<PatrocinadoresPlanoNegocio> negociosPatrocinadores) {
		this.negociosPatrocinadores = negociosPatrocinadores;
	}




	public static Model.Finder<Integer, PlanoNegocio> find = new Finder<Integer, PlanoNegocio>(Integer.class, PlanoNegocio.class);
	

}
